package com.market2.utils.converter.impl;

import java.util.ArrayList;
import java.util.List;

import com.market2.dto.InvestisseurDto;
import com.market2.model.Investisseur;
import com.market2.model.Operation;
import com.market2.utils.converter.Converter;

public class InvestisseurConverter extends Converter
{
	@SuppressWarnings("unchecked")
	public InvestisseurDto convertTo(Object source)
	{
		if(source == null || !(source instanceof Investisseur)) {
			return null;
		}
		
		InvestisseurDto result = new InvestisseurDto();
		Investisseur investisseur = (Investisseur) source;
		
		result.setNom(investisseur.getNom());
		result.setPrenom(investisseur.getPrenom());
		result.setLogin(investisseur.getLogin());
		result.setPassword(investisseur.getPassword());
		result.setAdresse(investisseur.getAdresse());
		result.setEmail(investisseur.getEmail());
		result.setProfil(investisseur.getProfil());
		result.setActive(investisseur.getActive());
		
		List<Integer> ventes = new ArrayList<Integer>();
		if(investisseur.getVentes() != null)
		{
			for(Operation vente : investisseur.getVentes()) {
				ventes.add(vente.getNumero());
			}
		}
		
		List<Integer> achats = new ArrayList<Integer>();
		if(investisseur.getAchats() != null)
		{
			for(Operation achat : investisseur.getAchats()) {
				achats.add(achat.getNumero());
			}
		}
		
		result.setVentes(ventes);
		result.setAchats(achats);
		
		return result;
	}

	@SuppressWarnings("unchecked")
	public Investisseur convertFrom(Object source)
	{
		if(source == null || !(source instanceof InvestisseurDto)) {
			return null;
		}
		
		InvestisseurDto investisseur = (InvestisseurDto) source;
		Investisseur result = new Investisseur();
		
		result.setNom(investisseur.getNom());
		result.setPrenom(investisseur.getPrenom());
		result.setLogin(investisseur.getLogin());
		result.setPassword(investisseur.getPassword());
		result.setAdresse(investisseur.getAdresse());
		result.setEmail(investisseur.getEmail());
		result.setProfil(investisseur.getProfil());
		result.setActive(investisseur.getActive());
		
		List<Operation> ventes = new ArrayList<Operation>();
		if(investisseur.getVentes() != null)
		{
			for(Integer numeroVente : investisseur.getVentes()) {
				Operation vente = getEntityManager().find(Operation.class, numeroVente);
				ventes.add(vente);
			}
		}
		
		List<Operation> achats = new ArrayList<Operation>();
		if(investisseur.getAchats() != null)
		{
			for(Integer numeroAchat : investisseur.getAchats()) {
				Operation achat = getEntityManager().find(Operation.class, numeroAchat);
				achats.add(achat);
			}
		}
		
		result.setVentes(ventes);
		result.setAchats(achats);
		
		return result;
	}
}
